import { getList } from "../const/subApps.js";

// 给当前的路由跳转打补丁
export const patchRouter = (globalEvent, eventName) => {
  return function() {
    const e = new Event(eventName);
    globalEvent.apply(this, arguments); // 我们使用 globalEvent 也就是传递过来的原生事件来代替我们当前这个 function 的执行
    window.dispatchEvent(e); // 自定义事件
  };
};

export const currentApp = () => {
  // 需要根据当前获取的 pathname 来查找到我们的子应用
  const currentUrl = window.location.pathname; // activeRule
  return filterApp("activeRule", currentUrl);
};

export const findAppByRoute = (router) => {
  return filterApp("activeRule", router);
}

// 查找子应用
const filterApp = (key, value) => {
  const currentApp = getList().filter((item) => item[key] === value);

  return currentApp && currentApp.length ? currentApp[0] : {};
};

// 子应用是否做了切换
export const isTurnChild = () => {
  window.__ORIGIN_APP__ = window.__CURRENT_SUB_APP__; // 上一个子应用
  // 当前的子应用和我们要跳转的子应用是一样的
  // console.log(window.__CURRENT_SUB_APP__,window.location.pathname); /vue3 === /vue3/
  // 那么现在呢我们就需要获取到我们的 location.pathname 里面符合我们 子应用配置的 activeRule 的这样一个规则
  const { pathname } = window.location;
  let prefix = pathname.match(/(\/\w+)/);
  if(prefix){
    prefix = prefix[0];
  }
  if(window.__CURRENT_SUB_APP__ === prefix){
    return false;
  }
  // 不一样的表示要跳转到另一个子应用去了
  const currentApp = window.location.pathname.match(/(\/\w+)/); // 由于 /vue3/ 和 react15，路径后面多了一个 / 所以用正则获取没有 / 的 /vue3
  if(!currentApp){
    return;
  }
  // vue3 vue2
  window.__CURRENT_SUB_APP__ = currentApp[0]; // 下一个子应用
  // console.log(window.__ORIGIN_APP__, window.__CURRENT_SUB_APP__);
  return true; // 当前我们是需要切换子应用
}
